package com.vecspace.database.model;

import java.util.List;

public class DbSchemas {

	//需要在spring xml中定义DbSchemas的bean，并注入schemas值
	private static List<DbSchema> schemas;
		
	public List<DbSchema> getSchemas() {
		return DbSchemas.schemas;
	}
	public void setSchemas(List<DbSchema> schemas) {
		DbSchemas.schemas = schemas;
	}

	/**替换sql中的schemal占位符,注意{{xxx.}}中的 . 号，比如 select * from {{sso.}}t_user where dept_id=?
	 * 
	 * @param sqlText
	 * @return 
	 * @author Administrator
	 * @reviewer  
	 * @createTime 2021年10月3日 下午7:40:16
	 */
	public static String prepareSqlSchemaPlaceholder(String sqlText) {
		if(schemas == null || schemas.size() == 0)return sqlText;
		if(sqlText == null)return null;
		String sqlTextResult = sqlText;
		for(DbSchema schema: schemas) {
			sqlTextResult = sqlTextResult.replace("{{"+schema.name+".}}", schema.schema);
		}
		do { //将其他的schema占位符替换为空字符串（没有特别指定的shcema）
			int idx1 = sqlTextResult.indexOf("{{");
			if(idx1 < 0)break;
			int idx2 = sqlTextResult.indexOf(".}}", idx1);
			if(idx2 < 0)break;
			
			String placeholder = sqlTextResult.substring(idx1, idx2 + 3);
			sqlTextResult = placeholder.replace(placeholder, "");
		}while(true);
		return sqlTextResult;
	}
	
	public static String getRealDbSchema(String placeholderSchema) {
		if(schemas == null || schemas.size() == 0)return placeholderSchema;
		if(placeholderSchema == null)return null;
		String realDbSchema = placeholderSchema;
		for(DbSchema schema: schemas) {
			realDbSchema = realDbSchema.replace("{{"+schema.name+"}}", schema.schema);
		}
		if(realDbSchema.startsWith("{{")) {//如果没有定义schema，则说明不需要特别指明schema，返回空字符串。
			realDbSchema= "";
		}
		return realDbSchema;
	}

	class DbSchema {
		private String name;
		private String schema;
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getSchema() {
			return schema;
		}
		public void setSchema(String schema) {
			this.schema = schema;
		}
	
	}

}
